package py.una.pol.pweb.compraventa;

import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;
import py.una.pol.pweb.compraventa.modelo.Producto;



@ManagedBean
@SessionScoped
public class ProductoBean implements Serializable{
	
	public ProductoBean(){}

	private Producto producto = new Producto ();
        private Producto productoSelected=new Producto();

        public Producto getProductoSelected() {
            return productoSelected;
        }

        public void setProductoSelected(Producto productoSelected) {
            this.productoSelected = productoSelected;
        }
	
	
	public Producto getProducto() {
		return producto;
	}


	public void setProducto(Producto producto) {
		this.producto = producto;
	}


	public void guardarProducto() {
            
            /*FacesContext context = FacesContext.getCurrentInstance();
                context.addMessage("somekey", facesMessage1);

             */
            FacesContext context = FacesContext.getCurrentInstance();
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("CompraVentaPU");
            EntityManager em = emf.createEntityManager();
            try {

                em.getTransaction().begin();
                producto = new Producto();
                producto.setNombre(productoSelected.getNombre());
                producto.setDescripcion(productoSelected.getDescripcion());
                producto.setCantidad(productoSelected.getCantidad());
                producto.setPreciocompra(productoSelected.getPreciocompra());
                producto.setPrecioventa(productoSelected.getPrecioventa());
                em.persist(producto);
                em.getTransaction().commit();



                productoSelected = new Producto();
                //context.addMessage("addProducto", new FacesMessage(FacesMessage.SEVERITY_INFO, "El Producto fue agregado con exito!", null));
                context.addMessage(null, new FacesMessage("Exito!", producto.getNombre() + ", agregado correctamete."));

            } catch (Exception e) {

                e.printStackTrace();
            } finally {
                em.close();
            }
	}

    @SuppressWarnings("unchecked")
    public List<Producto> getAllProductos() {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("CompraVentaPU");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
 
        Query allProductosQuery = em.createQuery("select d from Producto d");
 
        List<Producto> allProductos = allProductosQuery.getResultList();
 
        tx.commit();
        em.close();
        producto=new Producto();
        return allProductos;
    }
    
    
    public void modificarProducto(){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("CompraVentaPU");
        EntityManager em = emf.createEntityManager();
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            em.getTransaction().begin();
            Producto userx = em.find(Producto.class, productoSelected.getIdproducto());
            userx.setNombre(productoSelected.getNombre());
            userx.setDescripcion(productoSelected.getDescripcion());
            userx.setCantidad(productoSelected.getCantidad());
            userx.setPreciocompra(productoSelected.getPreciocompra());
            userx.setPrecioventa(productoSelected.getPrecioventa());
            em.getTransaction().commit();
            productoSelected=new Producto();
            context.addMessage(null, new FacesMessage("Modificado exitosamente!", producto.getNombre()+", agregado correctamete."));
        } finally {
            em.close();
            
        }
        
    
    }
    
    public String productoSelectedNombreChanged(){
            
        return productoSelected.getNombre();
    
    }
    public void limpiarForm(){
        productoSelected=new Producto();
    
    }
    
    public void agregarExito(){
    
        FacesMessage msg = new FacesMessage("Producto Agregado", producto.getNombre());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    
    }
    public void eliminarProducto(){
        FacesContext context = FacesContext.getCurrentInstance();
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("CompraVentaPU");
        EntityManager em = emf.createEntityManager();
        try {
            em.getTransaction().begin();
            Producto userx = em.find(Producto.class, productoSelected.getIdproducto());
            em.remove(userx);
            em.getTransaction().commit();
            limpiarForm();
            context.addMessage(null, new FacesMessage("Eliminado exitosamente!", producto.getNombre()+", agregado correctamete."));
            
        } finally {
            em.close();
            
        }
    
    }
}
